#include "signaturebox.h"
#include "ui_signaturebox.h"

signatureBox::signatureBox(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::signatureBox)
{
    ui->setupUi(this);

//    this->setWindowFlags(Qt::Dialog|Qt::FramelessWindowHint);
}

signatureBox::~signatureBox()
{
    delete ui;
}

//当鼠标按下时: 创建一条新线压入vector。并且将当前鼠标位置作为新线的起点。
void signatureBox::mousePressEvent(QMouseEvent *event)
{

    QVector<QPoint>line;
    _lines.append(line);

    QVector<QPoint>&last_line = _lines.last();  //注意：引用而不是新建，否则不是同一个内存
    last_line.append(event->pos());

    update();   //注意一定要记得update

}


//如果鼠标正在移动：将这些移动的点都压入最上面也就是最新的线
void signatureBox::mouseMoveEvent(QMouseEvent *event)
{
   //  qDebug() << "mouseMoveEvent";
    if(!_lines.size()){  //保证安全
        QVector<QPoint>line;
        _lines.append(line);
    }
    QVector<QPoint>&last_line = _lines.last();
    last_line.append(event->pos());

     update();   //注意一定要记得update
}


//如果鼠标松开，这个点就是新线的终点，只需要把此时的点压入最新线就可以了
void signatureBox::mouseReleaseEvent(QMouseEvent *event)
{
    QVector<QPoint>&last_line = _lines.last();
    last_line.append(event->pos());

    update();   //注意一定要记得update
}

//在鼠标事件中记录线的轨迹，在绘画事件中绘制轨迹
void signatureBox::paintEvent(QPaintEvent *)
{
    QPainter p(this);
    p.setPen(QPen(QColor(51, 51, 51), 2));//设置颜色和宽度
    if(_lines.size() > 0)
    {
        //开始画线
        emit sendBoxSin("1");
    }
    for(int i=0; i<_lines.size(); ++i)
    {
        const QVector<QPoint>& line = _lines.at(i);
        for(int j=0; j<line.size()-1; ++j)
        {
            p.drawLine(line.at(j), line.at(j+1));
        }
    }
}
